05a- Brightness Toolbar Swatches

  • warning: Declaration of views_handler_argument::init(&$view, &$options) should be compatible with views_handler::init(&$view, $options) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_argument.inc on line 745.
  • warning: Declaration of views_handler_filter::options_validate(&$form, &$form_state) should be compatible with views_handler::options_validate($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter.inc on line 585.
  • warning: Declaration of views_handler_filter::options_submit(&$form, &$form_state) should be compatible with views_handler::options_submit($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter.inc on line 585.
  • warning: Declaration of views_handler_filter_boolean_operator::value_validate(&$form, &$form_state) should be compatible with views_handler_filter::value_validate($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc on line 149.
  • warning: Declaration of views_plugin_style_default::options(&$options) should be compatible with views_object::options() in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_style_default.inc on line 25.
  • warning: Declaration of views_plugin_row::options_validate($form, &$form_state) should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.
  • warning: Declaration of views_plugin_row::options_submit($form, &$form_state) should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.

iPhone SDK開發範例大全第三章之七BrightnessToolbarSwatches(7/7):2009年11月09a日星期一

iPhone SDK開發範例大全即iPhone Developer's CookBook的中文譯本,程式可由erica網站下載。第三章講View Controller,程式共有七個。

本文講第5個程式,05a- BrightnessToolbarSwatches,CookBook 中文譯本3-8、132~135頁(訣竅3-5):

本程式的研讀宜先看120~151行,是 SampleAppDelegate中applicationDidFinishLaunching設定好tabBarController(H)。

在其130行的iniWithBrightness:i將程式轉至BrightnessController的96行,在這裡,設好了title及UITabBarItem(G)。

再由96行內的101行中的設self.tabBarItem, 有 image:createImage設定代表UITabBarItem的image。此地呼叫createImage(F)來產生一個grey level為brightness /10的30 x 30大小方塊的image。

在createImage中:83行呼叫addRoundedRectToPath(E)來畫30x30有弧角4x4的rectangle的tab,及81行呼叫MyCreateBitMapContext(D)填入grey。

addRoundedRectToPath(E)、MyCreateBitMapContext(D)用到Quartz 2D ,相當複雜,不易懂,但其只是產生出一個個不同百分比的tab而已。

詳細情形說明如下:

(A) 這程式主要是產生一個11個tab的tab bar在下方,每個tab代表10%的grey,從0%(全黑)到100%(全白)。按下tab則grey會顯示出來,百分比也顯示出來,如下圖。

 

(B)因為有11個tab,按下More,則出現下圖左之table,table上的grey是尚未被顯示在tabBar上的,按Edit出規下圖右,將想要顯示的grey拉至想取代的tab,如圖中,40%已取代了0%,80%正要取代20%。完成後接Done。

(C)此時,40% 10% 80% 30%在tab bar出現,如下圖左,按一下40%則如圖右。

(D)MyCreateBitMapContext(13~49行):產生一個CGContextRef。在80、81行被call。

CGContextRefCGColorSpaceCreateDeviceRGB return CGColorSpace

CGColorSpaceCGColorSpaceRelease (CGColorSpace cs ) decrement retain count of cs、

CGBitmapContextCreate:在CGBitmapContext中,有下列parameter:

void *data:一塊memory,讓Quarz粉刷顏色的memory,大小至少是bytesPerRow * hwight。

size_t width:bitmap的width有多少pixel。

size_t height:bitmap的height有多少pixel。

size_t bitsPerComponet:一個pixel component 有多少bits。

size_t bytesPerRow:bitmap一個row有多少bytes。

CGColorSpaceRef colorspac:bitmap用那一個color space ,例如RGB、CMYK等等。

CGBitmapInfo bitmapInfo : Bitmap的information constant,描述是否同alpha,每個componet是floating或integer...等等。

KGCImageAlphaPremultipliedLast是指alpha component在most significant bits of pixel,例如ARGB。(Quarz 2D programming guide)

UITabBarControllerDelegate

Modal View COntrollers(照相機軟體)--非inherit UIViewController、任何view controller均可modally presented;

90行:return [UIImage imageWithCGImage:myRef:]; 將myRef這個image轉成UIImage回傳。

 

(E)addRoundedRectToPath(51~75行):畫出tab,30x30有弧角4x4的rectangle。82行call到。

(F) createImage(78~91行):call addRoundedRectToPath及MyCreateBitMapContext,畫30x30有弧角4x4的rectangle的tab並填入grey,101行被call到。

 

(G) initWithBrightness:View Controller Programming Guide

100行:self.title,見UIViewControllerproperty title, 此處設title,在receiver是navigation controller時,則直接設定了navigation controller的title值。

101行:self.tabBarItem,見UIViewControllerproperty tabBarItem,一旦call 這個property,UITabBarItem就產生了,UITabBarItem inherit自UIBarItem: NSObject

UITabBarItem initWithTitle: (NSString *) title image (UIImage *)image tag:(NSInteger *) tag

title:UITabBarItem的title。

image:設定代表UITabBarItem的image。

此地呼叫createImage(F)來產生一個grey level為brightness /10的30 x 30大小方塊的image。

tag:這個UITabBarItem的代號。

(H) SampleAppDelegate中applicationDidFinishLaunching設定好tabBarController,如下:

127~136行:建立一個名為controllers的NSMutableArray,以BrightnessController為rootView的navigation controller。

130行的iniWithBrightness:i將程式轉至BrightnessController的96行,在這裡,設好了title及UITabBarItem供131行(此UIViewController為UINavigationController)及140行、141行(此UIViewController為一UITabBarController)使用。

140行:使用viewControllerscustomizableViewControllers將controllers設給UITabBarController tbarController。 UITabBarController inherit自UIViewController: UIResponder : NSObject,詳如下:

viewControllers(140行) :NSArray :tabBar會自index 0 開始顯示每一個tab。

customizableViewControllers(141行):NSArray :tabBar會自index 0 開始顯示每一個tab。

如此,tabBarController就作成了。